// 注意判断值类型和引用类型
// 注意判断是数组还是对象
// 递归

const obj = {
  name: 'hugo',
  age: 20,
  address: {
    city: 'shenzhen'
  },
  arr: [1, 3, 5]
}

const obj1 = obj;

obj1.address.city = 'guangzhou';
console.log(obj.address.city)

/**
 * 深拷贝
 * @param {Object} obj 要拷贝的对象
 */
function deepClone(obj ={}){
  if (typeof obj !== 'object' || obj == null){
    // obj 是 null，或者不是对象和数组，直接返回自身
    return obj
  }

  // 初始化返回结果
  let result
  if (obj instanceof Array){
    result = []
  }else{
    result = {}
  }

  for(let key in obj){
    // 保证 key 不是原型的属性
    if (obj.hasOwnProperty(key)){
      // 递归
      result[key] = deepClone(obj[key])
    }
  }
  return result
}
